const x: string[] = ['a', 'b'];
const y: readonly string[] = ['a', 'b'];

export { x, y };

let a: number[] = [];
let a: (string | number)[] = [];
let a: readonly number[] = [];
let a: readonly (string | number)[] = [];
let a = new Array();

let a: { foo: Bar[] }[] = [];
let yy: number[][] = [[4, 5], [6]];

let ya = [[1, '2']] as [number, string][];

function barFunction(bar: ArrayClass<String>[]) {
  return bar.map(e => e.bar);
}

function bazFunction(baz: Arr<ArrayClass<String>>) {
  return baz.map(e => e.baz);
}

let barVar: ((c: number) => number)[];

type barUnion = (string | number | boolean)[];

type barIntersection = (string & number)[];

interface FooInterface {
  '.bar': { baz: string[] };
}
type Unwrap<T> = T extends (infer E)[] ? E : T;

